package main

import (
	"fmt"
	"os"
	"strconv"
	"time"

	"github.com/golang-jwt/jwt/v4"
)

// JWTClaims JWT声明结构体
type JWTClaims struct {
	UserId string `json:"user_id"`
	jwt.RegisteredClaims
}

func main() {
	// JWT密钥
	jwtSecret := "secretKey"

	// 过期时间（24小时后）
	expTime := time.Now().Add(24 * time.Hour).Unix()

	// 创建输出文件
	file, err := os.Create("jwt_tokens.txt")
	if err != nil {
		fmt.Printf("创建文件失败: %v\n", err)
		return
	}
	defer file.Close()

	fmt.Println("开始生成1000个JWT令牌...")

	// 生成1000个JWT令牌
	for i := 1; i <= 10000; i++ {
		// 创建claims
		claims := &JWTClaims{
			UserId: strconv.Itoa(i),
			RegisteredClaims: jwt.RegisteredClaims{
				ExpiresAt: jwt.NewNumericDate(time.Unix(expTime, 0)),
				IssuedAt:  jwt.NewNumericDate(time.Now()),
			},
		}

		// 创建token
		token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

		// 签名token
		tokenString, err := token.SignedString([]byte(jwtSecret))
		if err != nil {
			fmt.Printf("生成token失败: %v\n", err)
			continue
		}

		// 写入文件
		_, err = file.WriteString(tokenString + "\n")
		if err != nil {
			fmt.Printf("写入文件失败: %v\n", err)
			continue
		}

		if i%100 == 0 {
			fmt.Printf("已生成 %d 个令牌\n", i)
		}
	}

	fmt.Println("JWT令牌生成完成！文件保存为: jwt_tokens.txt")
	fmt.Printf("令牌过期时间: %s\n", time.Unix(expTime, 0).Format("2006-01-02 15:04:05"))
}
